*******************************************************************************
●ドキュメント種別      ：各ライブラリ開発説明ファイル
●ファイル記号名称      ：MANPCM.DOC
●対象ライブラリ記号名称：pcm
●対象ライブラリ名称    ：ＰＣＭ・ＡＤＰＣＭ再生ライブラリ
●バージョン            ：1.16
●作成者                ：Y.T
●作成日                ：1995-03-31
●その他のメッセージ    ：なし
*******************************************************************************

１．概要
  本ライブラリは、サターンでのＰＣＭストリーム再生をサポートします。
　再生モードとして、メモリ再生モード，ファイル再生モード，ストリーム再生モード
があり、メモリ再生モードの使い方として常駐再生と、逐次供給再生があります。
　AIFF形式，APCM形式(SEGA ADPCM Encoder の出力ファイル形式)，CD-ROM XA Audio形
式のファイルを再生することができます。
　本ライブラリは、シネパックライブラリのオーディオ処理をもとに作成しているので
関数インタフェース等使用法は、シネパックライブラリとほとんど同じですが、ワーク
バッファ、ポーズ処理用ワークバッファの取り方など、若干の違いがありますので注意
して下さい。

２．提供物件
　・ＰＣＭ・ＡＤＰＣＭ再生ライブラリ
　・ＡＤＰＣＭ伸張ライブラリ
　・サンプルプログラム（ソース含む）、ＶＣＤ用スクリプト(VCD V1.72に対応)

３．対応バージョン
　  ターゲット　　　　　　　：PROGRAMMING BOX(ModelＳ) SCU2.4 以上
　  ファイルシステム　　　　：Ver1.20 以上 
　  ストリームシステム　　　：Ver1.20 以上 
　  ＤＭＡライブラリ　　　　：Ver1.05 以上 
  　サウンドＩ/Ｆライブラリ ：Ver1.05 以上
  　サウンドドライバ　　　　：Ver1.28 以上
  　ADPCM伸張ライブラリ 　　：Ver1.01 以上
  　バーチャルＣＤ関連(ＣＤからの再生を行う場合に必要)
　    　　VCDPRE      　　　：Ver3.06 以上 
          VCDBUILD        　：Ver3.06 以上 
          VCDEMU          　：Ver1.72 以上 

４．注意事項
４．１　各バッファの確保
  　　ワークバッファ　　：ワーク構造体のサイズ。
  　　リングバッファ　　：最低 (ｾｸﾀｻｲｽﾞ)*10 [byte]。
　　　ＰＣＭバッファ　　：4096*2 〜 4096*4 [sample/1ch]。
  　　ポーズ処理用ワーク：ＰＣＭバッファと同サイズが最適。最低 4096 [sample]。

４．２　ＳＣＵ−ＤＭＡ 使用時の注意
　　ＣＤブロックからリングバッファへのデータ転送をＳＣＵのＤＭＡで行う場合、
　ペリフェラル情報が正しく得られなくなることがあります。
　　この場合、最大転送セクタ数(デフォルト値 20)を小さく設定することで改善でき
　ますが、小さい設定をした場合、それに見合う十分な頻度でタスク関数（ストリーム
　再生の場合は STM_ExecServer 又は STM_ExecTrans）をコールする必要があります。
　　［処理例］
　　　　PCM_SetTrModeCd(pcm, PCM_TRMODE_SCU);  /* SCU-DMAで転送する         */
　　　　PCM_SetLoadNum(pcm, 5);                /* 1回の転送量の最大値 [ｾｸﾀ] */
　　また、ＳＣＵ−ＤＭＡで転送中は、使用するバスが占有されるので、ＳＨはＣＰＵ
　バスをアクセスしようとしたときからウエイト状態になってしまいます。
　　ＳＣＵ−ＤＭＡは、極力使用しないで下さい。

４．２　その他の注意
  ・本ライブラリはＣＰＵのタイマを使用します。ライブラリ動作時はＣＰＵのタイマ
  　を使用しないで下さい。

  ・PCM_Init 関数は、プログラムの先頭で必ずコールしてください。

  ・PCM_VblIn 関数は、ＶブランクＩＮ割り込みで毎回必ずコールしてください。

  ・PCM_Task 関数は、少なくともＶブランク割り込みの頻度（１回/１６ｍｓ）と同等
  　以上の頻度で、定期的にコールしてください。
    同じ音が２回なる場合は、PCM_Task の頻度が少なすぎることが考えられます。

  ・PCM_Start は作成したハンドルに対して、１回だけ実行できます。
    同じファイルを何度も再生したい時は、その都度ハンドルを生成してください。

  ・PCM_SetLoadNum, PCM_SetPcmStreamNo は再生開始する前にコールしてください。

  ・PCM_SetTrModeCd は、PCM_Taskをコールする前にコールしてください。

　・PCM_CreateMemHandle で生成したハンドルは、必ず PCM_NotifyWriteSize でリング
　　バッファへのデータ供給量を通知してください。

　・ADPCMを使用する場合、すなわち、SEGA ADPCM Encoder APCM形式かまたは、CD-ROM 
　　XA Audioを再生する場合は、PCM_DeclareUseAdpcm でADPCM使用宣言をして下さい。

　・CD-ROM XA Audio の再生をする場合は、必ず PCM_SetInfo で再生情報を設定して
　　ください。
　　CD-ROM XA Audio の再生では、ストリーム再生モード以外は使用できません。
　　サンプルプログラム smppcm5.c を参考にしてください。

５．サンプルプログラムの使用方法
  サンプルプログラムの使用方法は、\SATURN\SEGASMP\MAN\MANPCM.DOC を参照して
ください。

６．変更履歴
Ver.1.00 から Ver.1.10への変更点
　　　1) ライブラリ名称を変更しました。
　　　　［旧名称］「ＰＣＭ再生ライブラリ」
　　　　［新名称］「ＰＣＭ・ＡＤＰＣＭ再生ライブラリ」
　　　2) ＡＤＰＣＭ再生に対応しました。
　　　3) タスク関数の仕様を変更しました。
　　　　［旧仕様］４Ｖブランクに１回以上の頻度でコール。
　　　　　　　　　１回のタスクで処理する量は、最大PCMバッファの半分の量
　　　　［新仕様］１Ｖブランクに１回以上の頻度でコール。
　　　　　　　　　１回のタスクで処理する量は、最大4096サンプル分の量
    　4) ADPCM使用宣言関数 PCM_DeclareUseAdpcm を追加しました。
      　  宣言がなければ、ADPCM伸張ﾗｲﾌﾞﾗﾘがﾘﾝｸされない仕組みにしてあります。

Ver.1.10 から Ver.1.11への変更点
　　　1) 添付している ADPCM伸張ライブラリが Ver1.00 から Ver1.01 になりました。
　　　　   Ver1.00 では、リンクエラーが発生するケースがありました。
      ※ ＰＣＭ・ＡＤＰＣＭ再生ライブラリ自体は全く変更していません。

Ver.1.11 から Ver.1.12への変更点
      1) 次のエラーチェックを追加しました。
          PCM_ERR_TOO_SMALL_PCMBUF : 「ＰＣＭバッファサイズが小さすぎ」
          PCM_ERR_ILL_SIZE_PCMBUF  : 「ＰＣＭバッファサイズが不正」
      2) セクションに関して、次の修正をしました。
　　　　1.初期化データ領域（Ｄセクション）を使用しないように修正しました。
      3) 次のバグを修正しました。
        1.ストリームシステムを使って再生している時に、STM_SetExecGrp をコール
          すると､この関数から戻らない場合があり、修正しました。
          ストリームの消費速度，ストックに余裕があれば、再生中に一時的にスト
          リームグループを変更し、他のストリムーグループのデータを読むことが
          できるようになりました。

Ver.1.12 から Ver.1.13への変更点
　　　1) タスク関数の仕様を変更しました。
         ストリーム再生モードにおいて、以前は PCM_Task 内で STM_ExecServer 
         をコールしていましたが、STM_ExecServer は アプリケーション側がコール
         するように仕様変更しました。
　       旧バージョンと同等の動作を行うには、PCM_Task の直前で STM_ExecServer 
         をコールして下さい。複数のＰＣＭハンドルがあり、PCM_Task を連続して
         コールする場合でも STM_ExecServer は１回のコールで十分です。
         場合によっては STM_ExecServer の代わりに、ＣＤブロックからの転送だけ
         を行う STM_ExecTrans をコールすることもできます。
　　　　［旧仕様］１回のタスクで処理する量は、最大4096[sample/1ch]。
　　　　　　　　　ストリーム再生時、ライブラリ側が STM_ExecServer をコール。
　　　　［新仕様］１回のタスクで処理する量は調節可能｡ﾃﾞﾌｫﾙﾄ値 1024[sample/1ch]｡
　　　　　　　　　ストリーム再生時、アプリケーション側が STM_ExecServer 又は 
　　　　　　　　　STM_ExecTrans をコール。
　　　2) １回のタスク関数が処理する量の調節
　　　   PCM_Set1TaskSample で１回のタスクで処理する量の上限を設定できます。
  　　　 これによりタスク関数の負荷を安定させることができます。
　　　3) ＰＣＭ再生開始,停止条件の設定
　　　　 PCM_SetStartTrgSize, PCM_SetStartTrgSample などで、再生開始条件を
　　　　 きびしく設定すれば、再生開始後、データ供給が不安定でも再生の安全性が
　　　　 高くなります。

Ver.1.13 から Ver.1.14への変更点
      1) 次のバグを修正しました。
        ＡＩＦＦのステレオ再生時に、「つっ」とノイズが入る場合があり、修正し
        ました。

Ver.1.14 から Ver.1.15への変更点
　　　1) ファイル再生モードのデータ転送処理(CPUDMAの場合)の改善
　　　　３回のﾀｽｸｺｰﾙで１回分の最大転送ｾｸﾀ数の転送をしていました。
　　　　２回のﾀｽｸｺｰﾙで１回分の転送をするように修正しました。
      2) ループ再生機能の追加
        PCM_SetLoop で、ループする回数を指定します。デフォルト値１回。
　　　　メモリ再生モード、または、ファイル再生モードで使用して下さい。
　　　　メモリ再生モードの使い方には、常駐再生と、逐次供給再生がありますが、
　　　　ループ再生が利用できるのは常駐再生の場合です。
　　　　ストリーム再生モードは未対応です。
        PCM_EntryNext や PCM_Change はこの機能より優先されます。つまりループ
        回数の指定にかかわらず、登録されていた次のハンドルに切り替わります。
　　　　サンプルプログラム smppcm4, smppcm13 に処理例があります。
      3) サンプルプログラムの修正
      　サウンドドライバの初期設定をプログラムで行うように修正しました。

Ver.1.15 から Ver.1.16への変更点
      1) 次のバグを修正しました。
        ファイル再生における先読み処理
        　ファイルシステムを使って再生する時、PCM_Start より先に PCM_Task を
        　コールすると、その後再生を開始しようとして PCM_Start をコールした時
        　にＧＦＳにエラーを発生させてしまうバグがありました。
　　　　　修正により、再生開始前に PCM_Task をコールしていれば、正常にファイル
　　　　　の先読み処理が行えるようになりました。
      2) サウンドＩ/Ｆライブラリの使用
　　　　　旧処理：サウンドドライバへのコマンド発行は全て、独自に行う。
　　　　　　　　　コマンドブロックは、指定された特定の番号を使用する。
　　　　　新処理：サウンドドライバへのコマンド発行は全て、サウンドＩ/Ｆライブラ
　　　　　　　　　リを使用して行う。コマンドブロックは特定されない。
　　　　　サウンドドライバの仕様変更を吸収させるために、サウンドＩ/Ｆライブラリ
　　　　　を使用するように修正しました。今後は sega_snd.lib をリンクする必要が
　　　　　あります。
      3) 次の関数が削除されました。
　　　　　PCM_SetPcmCmdBlockNo :ＰＣＭコマンドブロック番号の設定

/********************************* end of file *******************************/
